package com.wang.tool.monitor.template;

import com.wang.tool.monitor.InvokeTemplate;
import com.wang.tool.common.SimpleException;
import com.wang.tool.common.ErrorInfo;

/**
 * 执行器
 *
 * @param <R>
 * @author shaopeng
 * @Date 2022/10/01
 */
public interface Invoker<R> {

    /**
     * 执行业务动作
     *
     * @return 返回值
     * @throws Throwable
     * @see InvokeTemplate
     */
    R internalCall() throws Throwable;

    /**
     * 当执行异常时
     *
     * @param e     非空
     * @param error 非空(逻辑上)
     * @return
     * @throws SimpleException 抛出
     * @see InvokeTemplate
     */
    R handleError(Throwable e, ErrorInfo error) throws SimpleException;
}